package utils

import (
	"encoding/json"
	"fmt"
	"my-zinx/ziface"
	"os"
)

// Environment 配置参数、环境变量
type Environment struct {
	// Server
	TCPServer ziface.IServer // Server对象
	Host      string         `json:"host"` // IP
	Port      int            `json:"port"` // 端口

	// Zinx
	Name             string `json:"name"`                // 服务器名称
	Version          string `json:"version"`             // ZINX 版本
	MaxPacketSize    uint64 `json:"max_packet_size"`     // 最大包长度
	MaxConn          int    `json:"max_conn"`            // 当前主机允许最大连接数
	WorkerPoolSize   uint64 `json:"worker_pool_size"`    // 请求队列数量
	MaxWorkerTaskLen uint64 `json:"max_worker_task_len"` // 一个队列最大任务容量
	MaxMsgChanLen    uint64 `json:"max_msg_chan_len"`    // 读写最大缓冲长度（字节数）
}

var Env *Environment

func (e *Environment) Reload() {
	data, err := os.ReadFile("../conf/env.json")
	if err != nil {
		fmt.Println("read file err: ", err)
		return
	}
	if err := json.Unmarshal(data, &Env); err != nil {
		fmt.Println("json unmarshal err: ", err)
		return
	}
}

func init() {
	Env = &Environment{
		Name:             "ZinxServerApp",
		Version:          "v0.0.8",
		Host:             "0.0.0.0",
		Port:             7777,
		MaxPacketSize:    4096,
		MaxConn:          12000,
		WorkerPoolSize:   10,
		MaxWorkerTaskLen: 1024,
		MaxMsgChanLen:    4096,
	}

	Env.Reload()
}
